import {Alert, Button, Card, Form, Input, message, Tabs, Typography} from 'antd';
import React, {useState} from 'react';
import {history, Link, useModel} from '@umijs/max';
import {login} from '@/services/ant-design-pro/userController';
import {LockOutlined, UserOutlined} from '@ant-design/icons';
import { saveUserAuth } from '@/utils/auth';
import styles from './index.less';

const {Title, Paragraph} = Typography;
const {TabPane} = Tabs;

/**
 * 登录错误提示组件
 */
const LoginMessage: React.FC<{
  content: string;
}> = ({content}) => (
  <Alert
    style={{
      marginBottom: 24,
    }}
    message={content}
    type="error"
    showIcon
  />
);

/**
 * 登录页面组件
 */
const Login: React.FC = () => {
  // 表单实例
  const [form] = Form.useForm();
  // 登录错误状态
  const [loginError, setLoginError] = useState<boolean>(false);
  // 登录方式（目前仅支持account方式）
  const [loginType, setLoginType] = useState<string>('account');
  // 登录加载状态
  const [loading, setLoading] = useState<boolean>(false);
  // 全局状态管理
  const {setInitialState} = useModel('@@initialState');
  // 错误信息
  const [errorMessage, setErrorMessage] = useState<string>('');

  /**
   * 处理表单提交
   * @param values 登录表单数据
   */
  const handleSubmit = async (values: API.UserLoginDTO) => {
    // 设置加载状态
    setLoading(true);
    // 清除之前的错误信息
    setLoginError(false);

    try {
      // 调用登录API
      const res = await login(values);

      // 登录成功处理
      if (res.code === 0 && res.data) {
        // 保存用户认证信息到本地存储
        if (res.data.token) {
          saveUserAuth(res.data, res.data.token);
        }

        // 显示成功消息
        message.success('登录成功！');

        // 更新全局用户状态
        await setInitialState((oldInitialState) => {
          return {
            ...oldInitialState,
            currentUser: res.data,
          };
        });

        // 登录成功后直接跳转到聊天页面，不再自动创建聊天会话
        // 聊天会话将在用户发送第一条消息时创建

        // 跳转到聊天页面（使用完全刷新确保状态更新）
        window.location.href = '/chat';
        return;
      }

      // 登录失败处理
      setLoginError(true);
      setErrorMessage(res.message || '登录失败，请检查账号密码');
      message.error(res.message || '登录失败，请检查账号密码');
    } catch (error: any) {
      // 异常处理
      console.error('登录请求错误:', error);
      setLoginError(true);
      const errorMsg = error.response?.data?.message || error.message || '登录失败，请检查网络连接或联系管理员';
      setErrorMessage(errorMsg);
      message.error(errorMsg);
    } finally {
      // 无论成功失败都关闭加载状态
      setLoading(false);
    }
  };

  return (
    <div className={styles.container}>
      <div className={styles.content}>
        {/* 页面标题区域 */}
        <div className={styles.header}>
          <Title level={2}>AI 聊天平台</Title>
          <Paragraph>智能聊天助手，随时随地为您提供帮助</Paragraph>
        </div>

        {/* 登录表单卡片 */}
        <Card className={styles.card}>
          <Tabs activeKey={loginType} onChange={setLoginType}>
            <TabPane key="account" tab="账号密码登录"/>
          </Tabs>

          {/* 错误提示 */}
          {loginError && <LoginMessage content={errorMessage}/>}

          {/* 登录表单 */}
          <Form
            form={form}
            onFinish={handleSubmit}
            layout="vertical"
          >
            {/* 账号输入框 */}
            <Form.Item
              name="account"
              rules={[{required: true, message: '请输入账号'}]}
            >
              <Input
                prefix={<UserOutlined/>}
                placeholder="账号"
                size="large"
              />
            </Form.Item>

            {/* 密码输入框 */}
            <Form.Item
              name="password"
              rules={[{required: true, message: '请输入密码'}]}
            >
              <Input.Password
                prefix={<LockOutlined/>}
                placeholder="密码"
                size="large"
              />
            </Form.Item>

            {/* 登录按钮 */}
            <Form.Item>
              <Button
                type="primary"
                htmlType="submit"
                block
                loading={loading}
                size="large"
              >
                登录
              </Button>
            </Form.Item>
          </Form>

          {/* 注册链接 */}
          <div className={styles.actions}>
            <Link to="/user/register">没有账号？立即注册</Link>
          </div>
        </Card>
      </div>
    </div>
  );
};

export default Login;
